/* @author cerimice */
package Dialogos.Modal.OrdenServicio;

import Sistema.Configuracion;
import Logica.Modulo.OrdenServicio.OrdenServicioLogica;
import Logica.Modulo.OrdenServicio.CierreOrdenServicioLogica;

import Persistencia.Definicion.CierreOrdenServicio;
import com.vaadin.ui.Button;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.terminal.ThemeResource;

import java.util.Date;

import com.vaadin.ui.Window;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.BaseTheme;
import java.util.logging.Logger;

public class CierreOrdenServicioDlg  extends Window
    {
    private OrdenServicioLogica         logicaOrden;
    private CierreOrdenServicioLogica   logicaCierre;
    
    private TextField                   claveCierre,ordenServicio,fecha,ticket,montoManoObra,montoRefacciones;
    private TextArea                    comentario;
    private Button                      guardar,cancelar;
    
    public CierreOrdenServicioDlg(OrdenServicioLogica logicaOrden,String orden)
        {
        this.logicaOrden = logicaOrden;
        logicaCierre = new CierreOrdenServicioLogica();
        agregarComponentes(orden);
        }
    
    public CierreOrdenServicioDlg(String orden)
        {
        logicaCierre = new CierreOrdenServicioLogica();
        agregarComponentes(orden);
        colocarDatosCierre(orden);
        }
    
    private void agregarComponentes(String orden)
        {
        claveCierre = new  TextField("Clave de Cierre");
            claveCierre.setWidth("600px");
            claveCierre.setEnabled(false);
        ordenServicio = new TextField("Orden de Servicio");
            ordenServicio.setValue(orden);
            ordenServicio.setWidth("300px");
            ordenServicio.setEnabled(false);
        fecha = new TextField("Fecha");
            fecha.setValue(Configuracion.getFormatoFechaCorta().format(new Date()));
            fecha.setWidth("300px");
            fecha.setEnabled(false);
        ticket = new TextField("Ticket de pago");
            ticket.setWidth("200px");
        montoManoObra = new TextField("Monto de mano de obra");
            montoManoObra.setWidth("200px");
        montoRefacciones = new TextField("Monto de refacciones");
            montoRefacciones.setWidth("200px");
        comentario = new TextArea("Comentario");
            comentario.setWidth("600px");
        guardar = new Button();
            guardar.setWidth("32px");
            guardar.setIcon(new ThemeResource("icons/personal/aceptar.png"));
            guardar.setStyleName(BaseTheme.BUTTON_LINK);
            guardar.setDescription("Guardar cierre para orden de servicio");
            guardar.addListener(new Button.ClickListener() {@Override public void buttonClick(Button.ClickEvent event){guardarCierreOrden();}});
        cancelar = new Button();
            cancelar.setWidth("32px");
            cancelar.setIcon(new ThemeResource("icons/personal/cancelar.png"));
            cancelar.setStyleName(BaseTheme.BUTTON_LINK);
            cancelar.setDescription("cierra esta ventana");
            cancelar.addListener(new Button.ClickListener() {@Override public void buttonClick(Button.ClickEvent event){cancelarCierreOrden();}});

        VerticalLayout cierreOrden = new VerticalLayout();
            cierreOrden.setWidth("630px");
            cierreOrden.setCaption("CIERRE DE ORDEN DE SERVICIO");
            cierreOrden.addComponent(claveCierre);
                HorizontalLayout cierreOrdenA = new HorizontalLayout();
                    cierreOrdenA.addComponent(ordenServicio);
                    cierreOrdenA.addComponent(fecha);
                HorizontalLayout cierreOrdenB = new HorizontalLayout();
                    cierreOrdenB.addComponent(ticket);
                    cierreOrdenB.addComponent(montoManoObra);
                    cierreOrdenB.addComponent(montoRefacciones);
                HorizontalLayout cierreOrdenC = new HorizontalLayout();
                    cierreOrdenC.addComponent(comentario);
                HorizontalLayout cierreOrdenD = new HorizontalLayout();
                    cierreOrdenD.addComponent(guardar);
                    cierreOrdenD.addComponent(cancelar);
            cierreOrden.addComponent(cierreOrdenA);
            cierreOrden.addComponent(cierreOrdenB);
            cierreOrden.addComponent(cierreOrdenC);
            cierreOrden.addComponent(cierreOrdenD);
            cierreOrden.setComponentAlignment(claveCierre, Alignment.TOP_CENTER);
            cierreOrden.setComponentAlignment(cierreOrdenA, Alignment.TOP_CENTER);
            cierreOrden.setComponentAlignment(cierreOrdenB, Alignment.TOP_CENTER);
            cierreOrden.setComponentAlignment(cierreOrdenC, Alignment.TOP_CENTER);
            cierreOrden.setComponentAlignment(cierreOrdenD, Alignment.TOP_CENTER);
        this.setContent(cierreOrden);
        this.setCaption("Cierre para orden de servicio");
        this.setModal(true);
        }
    
    private void colocarDatosCierre(String orden)
        {
        CierreOrdenServicio obj;
        try
            {
            ticket.setEnabled(false);
            guardar.addListener(new Button.ClickListener() {@Override public void buttonClick(Button.ClickEvent event){modificarCierreOrden();}});
            obj = logicaCierre.obtenerPorOrden(orden);
                claveCierre.setValue(obj.getClave());
                ordenServicio.setValue(obj.getOrdenServico());
                fecha.setValue(Configuracion.getFormatoFechaCorta().format(obj.getFecha()));
                ticket.setValue(obj.getTicket());
                montoManoObra.setValue(obj.getMontoManoObra());
                montoRefacciones.setValue(obj.getMontoRefacciones());
                comentario.setValue(obj.getComentario());
            }
        catch (IndexOutOfBoundsException ex)
            {
            getWindow().showNotification("Cierre Orden de Servicio...","No se cuenta con la información del registro.",Notification.TYPE_WARNING_MESSAGE);
            guardar.setEnabled(false);
            Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());
            }
        catch (Exception ex)
            {
            getWindow().showNotification("Cierre Orden de Servicio...","Problemas al cargar la información.",Notification.TYPE_WARNING_MESSAGE);
            Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());
            }
        }
    
    private void guardarCierreOrden()
        {
        try
            {
            String  orden       = (String)ordenServicio.getValue();
            Date    fechacierre = new Date();
            String  recibo      = (String)ticket.getValue();
            String  montoMano   = (String)montoManoObra.getValue();
            String  montoRefa   = (String)montoRefacciones.getValue();
            String  comenta     = (String)comentario.getValue();
        
            if(!logicaCierre.agregarObjeto(orden,fechacierre,recibo,montoMano,montoRefa,comenta))
                {getWindow().showNotification("Guardar Cierre...",logicaCierre.getError(),Notification.TYPE_WARNING_MESSAGE); return;}
            if(!logicaOrden.modificarObjeto(orden,5,false))
                {getWindow().showNotification("Guardar Cierre...",logicaOrden.getError(),Notification.TYPE_WARNING_MESSAGE); return;}
            this.close();
            }
        catch (Exception ex)
            {
            getWindow().showNotification("Cierre Orden de Servicio...","Pro favor revise los datos proporcionados.",Notification.TYPE_WARNING_MESSAGE);
            Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());
            }
        }
    
    private void modificarCierreOrden()
        {
        try
            {
            String  cierre      = (String)claveCierre.getValue();
            String  recibo      = (String)ticket.getValue();
            String  montoMano   = ""+montoManoObra.getValue();
            String  montoRefa   = ""+montoRefacciones.getValue();
            String  comenta     = (String)comentario.getValue();
        
            if(!logicaCierre.modificarObjeto(cierre,recibo,montoMano,montoRefa,comenta))
                {getWindow().showNotification("Guardar Cierre...",logicaCierre.getError(),Notification.TYPE_WARNING_MESSAGE); return;}
            this.close();
            }
        catch (Exception ex)
            {
            getWindow().showNotification("Cierre Orden de Servicio...","Pro favor revise los datos proporcionados.",Notification.TYPE_WARNING_MESSAGE);
            Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());
            }
        }
    
    private void cancelarCierreOrden()
        {this.close();}
    }
